package app.graphic; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import app.model.Product; import app.model.tree.Node; import app.model.tree.OrderNode; /** * Class that is used for creating the panel visible by the admin user. * * @author Bogdan * */ @SuppressWarnings("serial") public class AdminPanel extends JPanel { private JButton view = new JButton("Orders"); private JButton add = new JButton("Add"); private JButton delete = new JButton("Delete"); private JButton search = new JButton("Search"); private JButton update = new JButton("Update"); private JButton increase = new JButton("Increase"); private JButton decrease = new JButton("Decrease"); private JButton overStock = new JButton("Over-stock"); private JButton underStock = new JButton("Und-stock"); private JLabel label = new JLabel("Current available items"); private JTextArea info = new JTextArea(); private JScrollPane scroll = new JScrollPane(info); private JLabel greetLabel = new JLabel("Welcome admin"); private JButton all = new JButton("Clear Filter"); public AdminPanel(LoginController loginController, JFrame frame) { this.setLayout(new BorderLayout()); add(this.greetLabel, BorderLayout.PAGE_START); JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); panel.setBackground(Color.GRAY); label.setForeground(Color.WHITE); label.setAlignmentX(0f); JScrollPane sp = new JScrollPane(loginController.getItemList()); sp.setPreferredSize(new Dimension(300, 200)); sp.setViewportView(loginController.getItemList()); panel.add(label, BorderLayout.NORTH); info.setEditable(false); panel.add(sp, BorderLayout.CENTER); panel.add(this.info, BorderLayout.SOUTH); add(panel, BorderLayout.LINE_START); JPanel bPanel = new JPanel(); bPanel.setLayout(new GridLayout(5,1)); bPanel.setBackground(Color.GRAY); bPanel.add(this.search); addSearch(loginController, frame); bPanel.add(this.all); addAll(loginController, frame); bPanel.add(this.add); add(loginController); bPanel.add(this.delete); addDelete(loginController, frame); bPanel.add(this.update); addUpdate(loginController, frame); bPanel.add(this.increase); addIncrease(loginController, frame); bPanel.add(this.decrease); addDecrease(loginController, frame); bPanel.add(this.overStock); addOverStock(loginController, frame); bPanel.add(this.underStock); addUnderStock(loginController, frame); bPanel.add(this.view); addExit(loginController, frame); add(bPanel,BorderLayout.EAST); info.setEditable(false); add(this.info); scroll.setPreferredSize(new Dimension(150, 110)); scroll.setViewportView(info); add(scroll, BorderLayout.PAGE_END); } public void setBound(Component comp, Rectangle bounds) { comp.setBounds(bounds); } private void addExit(LoginController loginController, JFrame frame) { view.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { info.setText(""); info.append("From customer " + loginController.getCustomerName() + "\n"); int i = 1; for (Node order : loginController.getOpDept().getAllOrders()) { info.append("Order nr. " + i + " : " + loginController.getOpDept().getOrderName((OrderNode) order) + " with the quantity of " + loginController.getOpDept().getOrderQuantity((OrderNode) order) + "\n"); i++; } } }); } private void addDelete(LoginController loginController, JFrame frame) { delete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int selectedIndex = loginController.getItemList().getSelectedIndex(); if (selectedIndex != -1) { loginController.deleteProduct(loginController .getProductByName((String) loginController.getItemList().getSelectedValue())); loginController.getListModel().remove(selectedIndex); } else { JOptionPane.showMessageDialog(frame, "Please select an item from the list."); } } }); } private void add(LoginController loginController) { add.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JLabel nameLabel = new JLabel("Name of the item: "); JTextField name = new JTextField(); JLabel descriptionLabel = new JLabel("Description of the item: "); JTextField description = new JTextField(); JLabel numberLabel = new JLabel("Number of items added: "); JTextField number = new JTextField(); Object[] ob = { nameLabel, name, descriptionLabel, description, numberLabel, number }; int result = JOptionPane.showConfirmDialog(null, ob, "Adding", JOptionPane.OK_CANCEL_OPTION); if (result == JOptionPane.OK_OPTION) { try { Product newProduct = new Product(loginController.getMaxProductID() + 1, name.getText(), description.getText(), (Integer.parseInt(number.getText()))); loginController.addNewProduct(newProduct); } catch (NumberFormatException ex) { System.out.println("Invalid number entered"); } } } }); } private void addSearch(LoginController loginController, JFrame frame) { search.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JLabel searchLabel = new JLabel("Search item: "); JTextField search = new JTextField(); Object[] ob = { searchLabel, search }; int result = JOptionPane.showConfirmDialog(null, ob, "Searching", JOptionPane.OK_CANCEL_OPTION); if (result == JOptionPane.OK_OPTION) { loginController.updateListFromWarehouse(loginController.getProductsByFilter(search.getText())); } } }); } private void addOverStock(LoginController loginController, JFrame frame) { overStock.addActionListener(new ActionListener() { @SuppressWarnings("unchecked") @Override public void actionPerformed(ActionEvent e) { loginController.getListModel().removeAllElements(); for (Node product : loginController.getAllProducts()) { if (loginController.getProductByStock(product.getNodeName()) > 10) { loginController.getListModel().addElement(product.getNodeName()); } } } }); } private void addUnderStock(LoginController loginController, JFrame frame) { underStock.addActionListener(new ActionListener() { @SuppressWarnings("unchecked") @Override public void actionPerformed(ActionEvent e) { loginController.getListModel().removeAllElements(); for (Node product : loginController.getAllProducts()) { if (loginController.getProductByStock(product.getNodeName()) == 0) { loginController.getListModel().addElement(product.getNodeName()); } } } }); } private void addUpdate(LoginController loginController, JFrame frame) { update.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (loginController .getProductByName((String) loginController.getItemList().getSelectedValue()) != null) { JLabel updateLabel = new JLabel("Update stock: "); JTextField update = new JTextField(); Object[] ob = { updateLabel, update }; int result = JOptionPane.showConfirmDialog(null, ob, "Updating", JOptionPane.OK_CANCEL_OPTION); if (result == JOptionPane.OK_OPTION) { Product product = loginController .getProductByName((String) loginController.getItemList().getSelectedValue()); product.setStock(Integer.parseInt(update.getText())); getInfo().setText("Product Name: " + product.getName() + "\nStock: " + product.getStock() + "\nDescription: " + product.getDescription()); } } else { JOptionPane.showMessageDialog(frame, "Please select an item from the list."); } } }); } private void addIncrease(LoginController loginController, JFrame frame) { increase.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Product product = loginController .getProductByName((String) loginController.getItemList().getSelectedValue()); if (product != null) { int increase = product.getStock() + 1; product.setStock(increase); getInfo().setText("Product Name: " + product.getName() + "\nStock: " + product.getStock() + "\nDescription: " + product.getDescription()); } else { JOptionPane.showMessageDialog(frame, "Please select an item from the list."); } } }); } private void addDecrease(LoginController loginController, JFrame frame) { decrease.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Product product = loginController .getProductByName((String) loginController.getItemList().getSelectedValue()); if (product != null) { if (product.getStock() > 0) { int decrease = product.getStock() - 1; product.setStock(decrease); } if (product.getStock() == 0) { JOptionPane.showMessageDialog(frame, "The stock is empty"); } getInfo().setText("Product Name: " + product.getName() + "\nStock: " + product.getStock() + "\nDescription: " + product.getDescription()); } else { JOptionPane.showMessageDialog(frame, "Please select an item from the list."); } } }); } private void addAll(LoginController loginController, JFrame frame) { all.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { loginController.updateListFromWarehouse(loginController.getAllProducts()); } }); } /** * @return the info */ public JTextArea getInfo() { return info; } /** * @param info * the info to set */ public void setInfo(JTextArea info) { this.info = info; } }